package main
import (
		"fmt"
		_ "os"//此处的os就是一个代码包
		_ "runtime/cgo" //这种导入包的方式，会绕过编译器的检查   "runtime/cgo"代表了一个标准库代码包的标识符
	//这种方式没有真正地把它绑定在一个具体的名称上，也无法对这个代码包中的任何程序实体进行调用，无法通过标识符访问它
		)

/*
基本词法
	标识符 identifier
	关键字 keyword
	字面量 literal
		表示各种数据类型及其值的重要方法
	复合数据类型 复合字面量
	类型   type
		接口类型error
		常量true、false、iota

	操作符 operator
	分隔符 delimiter
	表达式
数据类型
	基本数据类型：byte/uint64/string
	高级数据类型：数组/切片/字典/结构体
	函数和方法
	接口
	指针
	数据初始化

	复合数据类型：chan、func、interface、map、struct对应

数据的使用
	赋值语句
	常量和变量
	可比性与有序性
	类型转换
	内建函数
*/


/*
Go语言的所有源码都必须由Unicode编码规范的UTF-8编码格式进行编码
也就是Go语言的源文件必须是UTF-8编码的
*/
func main(){
	fmt.Println("并发编程词法和数据类型")
	Expression()
	Expression2()
	Expression3()
	Expression4()
	Expression5()
	Expression6()

	BaseDataType()
	BaseDataType2()
	BaseDataType3()
	BaseDataType4()
	BaseDataType5()
	BaseDataType6()

	Array()
	Array2()
	Array3()
	Array4()
	Array5()
	Array6()

	Slice()
	Slice2()
	Slice3()
	Slice4()
	Slice5()
	Slice6()

	Map()
	Map2()
	Map3()
	Map4()
	Map5()
	Map6()

	Interface()
	Interface2()
	Interface3()
	Interface4()
	Interface5()
	Interface6()

	Struct()
	Struct2()
	Struct3()
	Struct4()
	Struct5()
	Struct6()

	Pointer()
	Pointer2()
	Pointer3()
	Pointer4()
	Pointer5()
	Pointer6()

	DataInitialization()

	AssignmentStatement()

	ConstantsAndVariables()

	VariableDeclaration()

	ComparabilityAndOrderliness()

	TypeConversion()

	ConversionBetweenNumericTypes()

	ConversionsRelatedToStringTypes()

	AliasTypeConversionBetweenValues()

	BuiltinFunction()
}


/*


*/
func Expression(){
	// 创建一个切片      []int{11,22,33,44,55}当做操作数
	fmt.Println([]int{11,22,33,44,55})

	// 基本表达式和索引符号组成另一个基本表达式   索引表达式
	// 取出索引为2的元素的值
	fmt.Println([]int{11,22,33,44,55}[2])


	//	类型转换作为基本表达式
	var v1 uint8 = 12
	var v2 int = 34
	//操作符 + 只能作用于两个类型完全相同的值
	// fmt.Println(v1 + v2) //error   invalid operation: v1 + v2 (mismatched types uint8 and int)
	fmt.Println(int(v1) + v2)//ok  46


	// 内建函数调用作为基本表达式
	//[]int{}
	//[]map{}



	// 基本表达式和选择符号组成另一个基本表达式






	// 基本表达式和切片符号组成另一个基本表达式





	// 基本表达式和类型断言符号组成另一个基本表达式





	// 基本表达式和一个调用符号组成另一个基本表达式





	//可变长参数
}


func Expression2(){


}

func Expression3(){


}

func Expression4(){


}

func Expression5(){


}

func Expression6(){


}



func BaseDataType(){
	// byte/uint64/string

}



func BaseDataType2(){



}


func BaseDataType3(){



}


func BaseDataType4(){



}


func BaseDataType5(){



}


func BaseDataType6(){



}





func Array(){



}


func Array2(){



}


func Array3(){



}


func Array4(){



}


func Array5(){



}


func Array6(){



}



func Slice(){



}


func Slice2(){



}


func Slice3(){



}


func Slice4(){



}


func Slice5(){



}


func Slice6(){



}



func Map(){



}


func Map2(){



}


func Map3(){



}


func Map4(){



}


func Map5(){



}


func Map6(){



}




func Interface(){



}


func Interface2(){



}


func Interface3(){



}


func Interface4(){



}


func Interface5(){



}


func Interface6(){



}



func Struct(){



}


func Struct2(){



}


func Struct3(){



}


func Struct4(){



}


func Struct5(){



}


func Struct6(){



}




//Golang不支持函数重载  构造函数、析构函数、虚函数都不存在
//不允许出现同名函数  即使参数列表不同
// func Pointer(name string){}
func Pointer(){



}


func Pointer2(){



}


func Pointer3(){



}


func Pointer4(){



}


func Pointer5(){



}


func Pointer6(){



}


//数据初始化
func DataInitialization(){

}



// 赋值语句
func AssignmentStatement(){

}



// 常量与变量
func ConstantsAndVariables(){}



// 变量声明
func VariableDeclaration(){}



// 可比性与有序性
//如何比较两个类型相同或不同的值
func ComparabilityAndOrderliness(){}

// 类型转换
func TypeConversion(){}

// 数值类型之间的转换
func ConversionBetweenNumericTypes(){}



// 与string类型相关的转换
func ConversionsRelatedToStringTypes(){}


// 别名类型值之间的转换
func AliasTypeConversionBetweenValues(){}



// 内建函数  Go语言内部预定义的函数
func BuiltinFunction(){
	// close len cap new make append copy delete complex real imag panic recover print println
	// close  只接受通道类型的值作为参数
	ch := make(chan int, 1)
	fmt.Println(ch)
	close(ch) //会使作为参数的通道无法再接受任何元素值，若试图关闭一个仅能接受元素值的通道，则会造成一个编译错误
	//在通道被关闭之后，再向它发送元素值或者试图再次关闭它的时候，都会引发一个运行时警告
	//关闭一个为nil的通道值也会引发一个运行时警告
	fmt.Println(ch)


	// len，cap 只接受一个参数 返回一个int类型的结果
	var m map[int]string = map[int]string{}
	fmt.Println(len(m))

	// new


	// make


	// append


	// copy


	// delete


	// complex


	// real


	// imag


	// panic


	// recover


	// print


	// println


}































































































































































































































